mlpfandomcom_pl-20200215-history
Wątek forum:WikiQuest/@comment-5077061-20130311235606
Witajcie! Oto dokument pozostawiony wam przez Skradacza. Zapoznajcie się z nim bardzo uważnie :) Dziś, na wyższym poziomie, zajmiemy się tym, o co męczy mnie już od dłuższego czasu Ulq, a co z pewnością przyda się w przyszłości Vengirowi w jego pracy edycyjnej. Będzie to przekrojowy kurs szablonów. Postaram się wam przekazać to co najważniejsze, także z mojego własnego doświadczenia, abyście nie mieli w przyszłości żadnych problemów z napisaniem dowolnie rozbudowanych systemów szablonów. Chcę również pokazać, jak bardzo rozbudowany i elastyczny jest system szablonów MediaWiki. Gdyby cokolwiek było niejasne lub zbyt szybko tłumaczone, prosze o zwrócenie mi na to uwagi. Na sam początek poruszę temat przestrzeni nazw. Jest on kluczowy dla zrozumienia wielu istotnych kwestii w oprogramowaniu MediaWiki. Ale o co w nim chodzi. Po krótce tutaj wam to wyjaśnię. Jak zauważyliście, lub też nie, każdy artykuł, na jaki wchodzicie, nie jest to pojedynczy, jednolity byt. To nie jest tak, że jak edytujecie i zapisujecie zmiany, to nadpisujecie jakąś treść. Tak naprawdę, podczas zapisywania każdych zmian tworzycie nową wersję. W istocie, cały silnik Wiki to jeden wielki kombajn służący do obsługi setek tysięcy wersji. Wersja, każda opisana przez unikalny numer i tytuł artykułu, jest tutaj podstawową jednostką danych i tak powinniście myśleć. Każde naciśnięcie przycisku Zapisz zmiany w oknie edycji jest równoznaczne z utworzeniem nowej wersji. Jak zatem orientujemy się w tym bałaganie? Gdy użytkownik wchodzi na artykuł traktujący np. o Berry Punch, oprogramowanie MediaWiki wyszukuje najnowszą nieusuniętą wersję opisaną jako Berry Punch. Artyuł można wyobrazić sobie zatem jako zbiór wersji - przejrzystą teczkę, którą, gdy chwycimy, widzimy kartkę-wersję na szczycie stosu. Zapisanie zaś tworzy nową wersję, automatycznie umiezczaną na górze stosu. Tym spinaczem, łączącym wszystkie wersje, jest nazwa artykułu. Oczywiście, bazą do stworzenia nowej wersji nie musi być najnowsza, istniejąca wersją. Ręczne wycofywanie zmian zniszczonych np. przez wandali to wlaśnie taki trik, polegający w istocie na skopiowaniu starszej wersji i umieszczeniu kopii na stosie, przysłaniając tym samym nieporządaną, uszkodzoną wersję. Wyższym stopniem organizacji treści na Wiki są przestrzenie nazw. Są to kolekcje artykułów, traktowanych przez mechanizmy MediaWiki tak samo. Przestrzeń nazw wskazuje na to, jaką rolę pełni artykuł w całym systemie. Nazwa przestrzeni poprzedza nazwę artykułui jest od niego oddzielona dwukropkiem. Aby rozjaśnić, o co tu chodzi, zaprezentuję kilka najważniejszych NS na naszej wiki: * (Główna przestrzeń nazw) - należą do niej artykuły stanowiące zasadniczą treść wiki, takie jak artykuły o postaciach, piosenkach, odcinkach itp. Uwaga! Ta przestrzeń nie ma nazwy jako takiej. Zatem wszystkie artykuły, w jakich nie ma nazwy przestrzeni nazw, są traktowane jako znajdujące się w przestrzeni głównej, np. Big Macintosh, Odcinki, Alikorny itp. * Dyskusja - tutaj, po usunięciu mechanizmu komentarzy, umieszczane są uwagi odnośnie artykułów. Strony dyskusji są to mechanicznie zwykłe artykuły. Zwróćcie uwagę, że strona dyskusji ma ten sam tytuł co artykuł, na temat którego traktuje. Zatem stronami dyskusji dla powyższych artykułów z głównej przestrzeni nazw będą odpowiednio: Dyskusja:Big Macintosh, Dyskusja:Odcinki, Dyskusja:Alikorny * Użytkownik - w tej przestrzeni znajdują się strony profilowe użytkowników oraz ich prywatne brudnopisy. Zachowują się bardzo podobnie do artykułów z głównej przestrzeni nazw * Dyskusja użytkownika - analogicznie do stron dyskusji dla głównej NS. U nas rzadko używane * My Little Pony Friendship is Magic Wiki - przestrzeń nazw zawierająca artykuły dostyczące samego projektu, jakim jest pl.mlp.wikia. To co zwraca w niej uwagę, to długaaaaaaaaaaśna nazwa. Weźmy choćby naszą stronę główną WikiQuesta, czyli My Little Pony Friendship is Magic Wiki:WikiQuest. OMG, jakie to dłuuuuugie! Czy z tym nie można nic zrobić? Można! * Project - to tzw. alias, czyli synonim przestrzeni nazw. Project: jest synonimem dla My Little bla bla bla...: czyli jeżeli stworzymy link Project:WikiQuest, to MediaWiki w locie podmieni nazwę NS na właściwą. Kliknij i sprawdź, jeśli nie wierzysz ;) * Dyskusja My Little... - no dobra, pas. I tak tego nie używamy :P * Szablon - przestrzeń nazw, która jest najprzyjaźniejsza jeśli chodzi o tworzenie szablonów. * Forum - zawiera działy forum. To tzw. przestrzeń wirtualna. Oznacza to, że jej artykuły są sztucznie generowane przez oprogramowanie, a nie są rzeczywistymi artykułami. * Wątek - zawiera wątki, także wirtualna * Specjalna - mega zajebiście ważna przestrzeń nazw, też wirtualna. Udostępia multum ważnych funkcjonalności, takich jak logowanie, wyszukiwanie, listy artykułów, zestawienie ostatnich zmian i dużo, duuuuużo więcej. Sprawdźcie zresztą sami: Specjalna:Strony specjalne * Plik - elementy tej przestrzeni nazw są plikami wraz z opisem. Pliki zachowują się jak artykuły, tj. mają swoje wersje. * MediaWiki - bardzo ciekawa przestrzeń, której artykuły są używane jako komunikaty systemowe i elementy interfejsu. Przykładowo, tam definiuje się wygląd głównego menu, treść wiadomości powitalnej, treść kącika społeczności i in. Ciekawskich odsyłam tu: Specjalna:Wszystkie komunikaty. Komunikaty mogą edytować wyłącznie administratorzy * Kategoria - umożliwia spójną kategoryzację innych artykułów Yay, ale chaos :p No ale mam nadzieję, że wychwyciliście ideę przestrzeni nazw. Teraz przejdziemy do tzw. wyrażenia transkluzyjnego. Ten termin to mój wymysł, ale myślę, że dobrze oddaje ideę. Na razie brzmi raczej dziwnie, ale za chwilę wszystko się rozjaśni. Mechanizm szablonów na MediaWiki opiera się zasadniczo na transkluzji. Transkluzja to, mówiąc bardzo prostym językiem, wklejenie do danego artykułu zawartości innego artykułu. Sam mechanizm traskluzji działa najwygodniej właśnie dla przestrzeni nazw Szablon:. To, co znaliście dotychczas pod pojęciem używania szablonów, jest niczym innym, jak właśnie transkluzją. Ale jak MediaWiki ma wiedzieć, gdzie i co wkleić? Tu właśnie z pomocą przychodzi wyrażenie transkluzyjne. Jego cechą charakterystyczną jest otoczenie przez podwójne klamry: . Interpreter wikikodu rozpoznaje te wyrażenia i zamiast nich wkleja kawałki kodu, do których się odwołuje. Zaraz pokażę wam, jak potężne jest to narzędzie. Weźmy najprostszy przykład. W swej najbardziej trywalnej formie, wyrażenie transkluzyjne wkleja artykuł z przestrzeni Szablon: o nazwie danej w wyrażeniu. Czyli będzie przy każdym załadowaniu artykułu podmieniane na najnowszą wersję artykułu Szablon:Foo. Każdy chyba zetknął się z takim zwierzątkiem w pracy redakcyjnej :) Zatem przejdę do trochę bardziej zaawansowanych sztuczek. Jak już wspomniałem, interpreter za każdym załadowaniem artykułu, ładuje również powklejane szablony. Zatem gdy zmienimy szablon, zmieni się również na wszystkich stronach, gdzie jest wklejony. Czy tak jednak musi być? Oczywiście, że nie ;) Jeżeli zyczymy sobie, aby podczas zapisu kod wklejanego szablonu został sztywno wstawiony do kodu artykułu, wystarczy użyć przedrostka subst:, czyli, dla naszego przykładu, byłoby to . A co, gdy chcemy wstawić artykuł z przestrzeni nazw innej niż akurat Szablon:? Nic prostszego, wystarczy ją dopisać, np. używa strony Użytkownik:Foo, zaś wkleja ją na stałe. Zapamiętajcie to zresztą, bo przyda się podczas ćwiczeń :p Problem może pojawić się, gdy spróbujemy transkludować coś z głównej przestrzeni nazw. Przecież nazwy bez prefiksu odwołują się tutaj do przestrzeni szablonów, jak zatem wkleić np. artykuł o Pinkie Pie? Przecież odeśle nas do Szablon:Pinkie Pie! Co zrobić? To dość proste, wystarczy dodać dwukropek przed nazwą. Zatem grzecznie wstawi nam artykulik o różowej imprezowiczce, a nawet zrobi to na sztywno. No dobra. Ale przecież nie każde wstawienie szablonu musi wyglądać tak samo. Co, gdybym np. chciał zrobić szablon cytatu? Dla każdego cytatu miałbym tworzyć odrębny szablon?? No way, to jest właśnie najpiękniejsze w szablonach! W wyrażeniu transkluzyjnym, można podać, oprócz nazwy wstawianego artykułu, zestaw parametrów. Co to jest parametr? To jakaś wartość, która podczas wklejania jest przekazywana do treści szablonu i wpływa na nią. Najpierw od strony żądania. Parametry mogą być nazwane i numerowane. Parametr nazwany ma postać: nazwa=wartość. Są one rozdzielne pionową linią. Oto prosty przykład: Tutaj mamy dwa parametry nazwane, chyba nie musze tłumaczyć. A co z parametrami numerowanymi? Z pewnością spotkaliście się z nimi w prostszych szablonach, gdzie parametry nie miały nazwy. Spojrzyjcie tutaj: . I co z tym fantem robi interpreter MediaWiki? Wszak każdy parametr musi mieć swoją nazwę! Rozwiązanie jest dziecinnie proste - parametrom są przypisywane kolejne liczby porządkowe. Zatem poprzednie wyrażenie oznacza dokładnie to samo co . Mam nadzieję, że zrozumieliście ;) A jak to wygląda od strony treści samego szablonu? Otóż bardzo podobnie - szablon może czytać dostarczone parametry przy użyciu wyrażeń parametrycznych. O co tu chodzi? Mają one bardzo podobną budowę do w. transkluzyjnych, tyle, że dostały dodatkowo jedne klamerki, np. }. Gdy szablon jest wklejany, interpreter wyszukuje pasujących wyrażeń parametrycznych i podmienia je na dostarczone parametry. Tutaj, po wklejeniu szablonu, zamiast wyrażenia pojawiłby się tekst parametr 1. Ech, mam nadzieję, że nie gnam zbytnio :) Ostatnim trikiem jest parametr alternatywny. Określa on sposób reakcji na brak dostarczenia parametru przez użytkownika. Weźmy trywalny szablon o następującej treści: Jestem }, a mój ulubiony kucyk to } Gdybyśmy spróbowali wstawić ten szablon przy użyciu , uzyskalibyśmy taki efekt: Jestem Krzysiu, a mój ulubiony kucyk to Luna Co jednak, gdybyśmy np. nie podali imienia? Wówczas wyrażenie parametryczne pozostanie nienaruszone: Jestem }, a mój ulubiony kucyk to Luna Aby poradzić sobie z eksperymentatorami oraz zmniejszyć ilość wymaganych parametrów (wyobrażacie sobie wywołanie szablonu ? xD), można wymusić na interpreterze podmianę wyrażeń parametrycznych na określoną wartość, jeżli dany parametr nie pojawiłby się. Poprawmy zatem nasz szablon: Jestem }, a mój ulubiony kucyk to } Teraz po wywołaniu bez parametru imienia, dostaniemy bardziej estetyczne: Jestem kimś, a mój ulubiony kucyk to Luna Czyli wystarczy dodać wewnątrz wyrażenia pionową kreskę i podać po niej domyślną wartość. Zadania: # Sprawdź, co się stanie, gdy wymieszasz parametry nazwane i numerowane. Zaobserwowane zjawisko krótko opisz w brudnopisie WQ (1p) # Stwórz szablon krótkiego komunikatu zawierającego życzenia z okazji urodzin. Użyj co najmniej trzech parametrów, co najmniej jednego z parametrem alternatywnym. (4p) # Odtwórz gadżet ze strony głównej "Poprzedni/następny odcinek" w postaci czteroparametrowego szablonu. Podstawowy wygląd: wycentrowane fotosy i tytuły odcinków, wyżej poprzedni, a poniżej nadchodzący. Szablon ma być odporny na braki jakichkolwiek parametrów. (4p) Prace nad szablonami prowadźcie w przestrzeni nazw Użytkownik. EDIT: -redlinki